<?php

/**
 * Formular pentru completarea informatiilor suplimentare la distribuirea unei cheltuieli pentru apa (calda si rece)
 *
 */
abstract class CriteriuFormApaBase extends CriteriuForm
{
    // define the field names
    const CANTITATE_FACTURATA   = 'cantitate';
    const CANTITATE_COMUN       = 'cantitate_comun';
    const PIERDERI              = 'pierderi';
    const REPARTIZARE_PIERDERI  = 'repartizare_pierderi';
    const REPARTIZARE_DIFERENTE = 'repartizare_diferente';

    protected static $name;

    protected static function buildClassName($format)
    {
        $class = get_called_class();
        $className = sprintf($format, ucfirst($class::$name));

        return $className;
    }

    /**
     * Configure the form
     */
    public function configure()
    {
        // definirea campurilor
        $this->setWidgets(array(
            self::CANTITATE_FACTURATA   => new sfWidgetFormInputText(),
            self::CANTITATE_COMUN       => new sfWidgetFormInputText(),
            self::PIERDERI              => new sfWidgetFormInputText(),
            self::REPARTIZARE_PIERDERI  => new sfWidgetFormSelect(array(sfWidgetFormSelect::OPTION_CHOICES => $this->getRepartizareChoices())),
            self::REPARTIZARE_DIFERENTE => new sfWidgetFormSelect(array(sfWidgetFormSelect::OPTION_CHOICES => $this->getRepartizareChoices())),
        ));

        // definirea label-urilor
        $this->setLabels(array(
            self::CANTITATE_FACTURATA   => 'Cantitate facturată [m³]',
            self::CANTITATE_COMUN       => 'Cantitate consumată pentru spaţiile comune [m³]',
            self::PIERDERI              => 'Pierderi [m³]',
            self::REPARTIZARE_PIERDERI  => 'modul de repartizare a pierderilor',
            self::REPARTIZARE_DIFERENTE => 'modul de repartizare a diferenţelor de citire',
        ));

        // definesc validatorii
        $this->setValidators(array(
            self::CANTITATE_FACTURATA   => new sfValidatorNumber(array('required' => true)),
            self::CANTITATE_COMUN       => new sfValidatorNumber(array('required' => false)),
            self::PIERDERI              => new sfValidatorNumber(array('required' => false)),
            self::REPARTIZARE_PIERDERI  => new sfValidatorChoice(array('required' => false, 'choices' => array_keys($this->getRepartizareChoices(true)))),
            self::REPARTIZARE_DIFERENTE => new sfValidatorChoice(array('required' => true, 'choices' => array_keys($this->getRepartizareChoices(true)))),
        ));

        $validatorClassName = self::buildClassName('Apa%sPostValidator');
        $this->mergePostValidator(new $validatorClassName());

    }

    /**
     * Returneaza modurile de repartizare a pierderilor/diferentelor
     *
     * @return array Array de forma {criteriu_id => descriere_criteriu}
     */
    public function getRepartizareChoices($forValidation = false)
    {
        $criteriuClassName = self::buildClassName('CriteriuApa%s');
        $criteriu = new $criteriuClassName();
        $choices = $criteriu->getRepartizareChoices();
        if (!$forValidation)
        {
            $choices[''] = 'selectaţi criteriul ...';
            ksort($choices);
        }

        return $choices;
    }


}
